Simplify inferred binary names
authorAleksey Kladov <aleksey.kladov@gmail.com>
Fri, 16 Jun 2017 19:41:27 +0000 (22:41 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Fri, 16 Jun 2017 19:41:27 +0000 (22:41 +0300)
src/cargo/util/toml.rs
tests/build.rs
tests/cargotest/support/mod.rs

index 34ab86a314327dcc6d4e7c9cef7356a353239fc3..66c947f1017d26f3b62146ea03c654e8bc4fd795 100644 (file)
@@ -1415,12 +1415,9 @@ fn normalize(package_root: &Path,
 
     if let Some(ref lib) = *lib {
         lib_target(&mut ret, lib);
-        bin_targets(&mut ret, bins,
-                    &mut |bin| inferred_bin_path(bin, package_root, true, bins.len()));
-    } else if bins.len() > 0 {
-        bin_targets(&mut ret, bins,
-                    &mut |bin| inferred_bin_path(bin, package_root, false, bins.len()));
     }
+    bin_targets(&mut ret, bins,
+                &mut |bin| inferred_bin_path(bin, package_root, bins.len()));
 
 
     if let Some(custom_build) = custom_build {
@@ -1444,31 +1441,7 @@ fn normalize(package_root: &Path,
 
 fn inferred_bin_path(bin: &TomlBinTarget,
                      package_root: &Path,
-                     lib: bool,
                      bin_len: usize) -> PathBuf {
-    // we have a lib with multiple bins, so the bins are expected to be located
-    // inside src/bin
-    if lib && bin_len > 1 {
-        return Path::new("src").join("bin").join(&format!("{}.rs", bin.name()))
-                    .to_path_buf()
-    }
-
-    // we have a lib with one bin, so it's either src/main.rs, src/bin/foo.rs or
-    // src/bin/main.rs
-    if lib && bin_len == 1 {
-        let path = Path::new("src").join(&format!("main.rs"));
-        if package_root.join(&path).exists() {
-            return path.to_path_buf()
-        }
-
-        let path = Path::new("src").join("bin").join(&format!("{}.rs", bin.name()));
-        if package_root.join(&path).exists() {
-            return path.to_path_buf()
-        }
-
-        return Path::new("src").join("bin").join(&format!("main.rs")).to_path_buf()
-    }
-
     // here we have a single bin, so it may be located in src/main.rs, src/foo.rs,
     // srb/bin/foo.rs or src/bin/main.rs
     if bin_len == 1 {
index 0d533b406891df12af6bdab29d1de89c23df738d..d1326053176e74622ff1b81475898a192c457061 100644 (file)
@@ -3229,3 +3229,25 @@ fn deterministic_cfg_flags() {
 --cfg cfg_a --cfg cfg_b --cfg cfg_c --cfg cfg_d --cfg cfg_e`
 [FINISHED] dev [unoptimized + debuginfo] target(s) in [..]"));
 }
+
+#[test]
+fn explicit_bins_without_paths() {
+    let p = project("foo")
+        .file("Cargo.toml", r#"
+            [package]
+            name = "foo"
+            version = "0.1.0"
+            authors = []
+
+            [[bin]]
+            name = "foo"
+
+            [[bin]]
+            name = "bar"
+        "#)
+        .file("src/lib.rs", "")
+        .file("src/main.rs", "fn main() {}")
+        .file("src/bin/bar.rs", "fn main() {}");
+
+    assert_that(p.cargo_process("build"), execs().with_status(0));
+}
index 8177785b25c1acb70c3201259acd7882785bb31f..7b4639d824cab3709196a067dd980860e78a890b 100644 (file)
@@ -436,13 +436,12 @@ impl Execs {
         }
 
         if let Some(ref objects) = self.expect_json {
-            let lines = match str::from_utf8(&actual.stdout) {
-                Err(..) => return Err("stdout was not utf8 encoded".to_owned()),
-                Ok(stdout) => stdout.lines().collect::<Vec<_>>(),
-            };
+            let stdout = str::from_utf8(&actual.stdout)
+                .map_err(|_| "stdout was not utf8 encoded".to_owned())?;
+            let lines = stdout.lines().collect::<Vec<_>>();
             if lines.len() != objects.len() {
-                return Err(format!("expected {} json lines, got {}",
-                                   objects.len(), lines.len()));
+                return Err(format!("expected {} json lines, got {}, stdout:\n{}",
+                                   objects.len(), lines.len(), stdout));
             }
             for (obj, line) in objects.iter().zip(lines) {
                 self.match_json(obj, line)?;